package com.future.future.commons.valid.annotation;



import com.future.future.commons.valid.constraintValidator.ListValueConstraintValidatorForInteger;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * @Author: shinan
 * @Version: 1.8
 * @create: 2020/12/31 13:50
 * @Description: 标记字段可以使用哪些值
 * 》元注解信息
 * 》@Target 注解可以标记在哪个地方
 * 》@Retention 注解可以在运行时获取到
 * 》@Constraint 标记该注解是使用哪个校验器进行校验的 必须指定  如果不直接指定  就需要在初始化时进行指定 可以使用多个来适配不同类型的校验
 *
 * 》@Documented 注解表明这个注解应该被 javadoc工具记录
 */
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {ListValueConstraintValidatorForInteger.class})
public @interface ListValue {

    /**
     * 所有的错误信息都放在ValidationMessages.properties中
     * 错误信息的key一般是全类名.message
     *
     * @return 校验出错后错误信息去哪儿取
     */
    String message() default "{com.sn.common.valid.annotation.ListValue.message}";

    /**
     * @return 支持分组校验
     */
    Class<?>[] groups() default {};

    /**
     * @return 可以自定义一些负载信息
     */
    Class<? extends Payload>[] payload() default {};

    /**
     * @return 指定可以使用哪些值
     */
    int[] values() default {};
}
